package com.gxar.uaa.server.base.model.menu.mapper;

import com.gxar.uaa.api.dto.menu.SysMenu;
import com.gxar.uaa.server.base.model.menu.vo.request.MenuCreateRequest;
import com.gxar.uaa.server.base.model.menu.vo.request.MenuUpdateRequest;
import com.gxar.uaa.server.base.model.menu.vo.response.MenuCreateResponse;
import com.gxar.uaa.server.base.model.menu.vo.response.MenuInfoResponse;
import com.gxar.uaa.server.base.model.menu.vo.response.MenuTreeResponse;
import com.gxar.uaa.server.base.model.menu.vo.response.MenuUpdateResponse;
import com.gxar.uaa.server.db.model.SysMenuEntity;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.List;

/**
 * @author linsy
 * @version 1.0
 * @created 2023/11/9 17:25
 */
@Mapper
public interface MenuMapStruct {
    MenuMapStruct INSTANCE = Mappers.getMapper(MenuMapStruct.class);

    /**
     * 菜单模型转菜单信息响应
     *
     * @param sysMenu 菜单实体
     * @return 菜单信息
     */
    MenuInfoResponse sysMenuToInfoResponse(SysMenu sysMenu);

    /**
     * 菜单模型转菜单信息响应
     *
     * @param sysMenu 菜单实体
     * @return 菜单信息
     */
    List<MenuInfoResponse> sysMenuToInfoResponseList(List<SysMenu> sysMenu);

    /**
     * 菜单转菜单树
     *
     * @param menuVo 菜单
     * @return 菜单树
     */
    MenuTreeResponse sysMenuToTreeResponse(SysMenu menuVo);

    /**
     * 菜单转菜单树
     *
     * @param menus 菜单
     * @return 菜单树
     */
    List<MenuTreeResponse> sysMenuVoToTreeResponses(List<SysMenu> menus);

    /**
     * 菜单创建请求转菜单实体
     *
     * @param request 菜单创建请求
     * @return 菜单实体
     */
    SysMenuEntity createToMenu(MenuCreateRequest request);

    /**
     * 菜单更新请求转菜单实体
     *
     * @param request 菜单更新请求
     * @return 菜单实体
     */
    SysMenuEntity updateToMenu(MenuUpdateRequest request);

    /**
     * 菜单实体转菜单创建响应
     *
     * @param entity 菜单实体
     * @return 菜单创建响应
     */
    MenuCreateResponse menuToCreate(SysMenuEntity entity);

    /**
     * 菜单实体转菜单更新响应
     *
     * @param entity 菜单实体
     * @return 菜单更新响应
     */
    MenuUpdateResponse menuToUpdate(SysMenuEntity entity);

}
